import { dinningTable } from './diningTable'
import { menu } from './menu'
import { order } from './order'
import { orderDetail } from './orderDetail'
import { User } from './user'

export default {
  async defineRelation() {
    // 用户和餐桌存在一对一关系
    User.hasOne(dinningTable)
    dinningTable.belongsTo(User)
    // 订单和餐桌存在一对一关系
    dinningTable.hasOne(order)
    order.belongsTo(dinningTable, {
      foreignKey: 'dinningTableId'
    })
    // 订单和用户存在一对多关系
    User.hasMany(order)
    order.belongsTo(User, {
      foreignKey:'UserId'
    })
    // 订单和订单细节存在一对多关系,实际上一对一和一对多的本质在于外键这一列不同元组的值是否可以重复(是否unique)
    order.hasMany(orderDetail)
    orderDetail.belongsTo(order, {
      foreignKey: 'orderId'
    })
  },
  // 这是分割线，在这之上的定义的是sequelize对象关系映射中的关系，每次在dataGrip中如果改变了相关关系（比如改变外键名字）
  // 就应该在这里同步更改对象关系映射，让sequelize能够和数据库的更改同步(database->sequelize)

  // 假如想通过sequelize来改变数据库关系模式，就执行下方的语句让数据库和sequelize保持同步(sequelize->database)
  async createTable() {
    // 菜单是个单独表不存在关联
    // await User.sync({ alter: true })
    // await dinningTable.sync({ alter: true })
    // await menu.sync({alter:true})
    // await orderDetail.sync({force:true})
    // await order.sync({alter:true})
  }
}
